//
//  $Id$
//  VCS_WS_Client
//
//  Created by hu_danyuan on 18-11-09.
//   (c) Copyright 2018, hu_danyuan All Rights Reserved
//
//	描    述:  结构化数据定义
//

#import <Foundation/Foundation.h>

#define VCS_WS_ERROR_NONE               0
#define VCS_WS_ERROR_UNKNOWN            -1
#define VCS_WS_ERROR_INVALID_JSON       0x1001      // 无效json //
#define VCS_WS_ERROR_INVALID_DATA       0x1002      // 无效数据，可能是编码不对导致 //
#define VCS_WS_ERROR_INVALID_PARAM      0x1003      // 无效参数 //
#define VCS_WS_ERROR_SEND_FAIL          0x1004      // 发送请求失败 //
#define VCS_WS_ERROR_REQUEST_TIMEOUT    0x1005      // 请求超时 //
#define VCS_WS_ERROR_CONNECTION_BROKEN  0x1006      // 连接断开 //
#define VCS_WS_ERROR_INVALID_STREAM     0x1007      // 无效的码流通道，可能码流没有打开 //
#define VCS_WS_ERROR_FAILED             0x1008      // 操作失败 //

typedef NS_ENUM(NSInteger, VCS_WS_ClientState) {
    VCS_WS_ClientStateConnecting   = 0,
    VCS_WS_ClientStateConnected,
    VCS_WS_ClientStateLogined,
    VCS_WS_ClientStateClosing,
    VCS_WS_ClientStateClosed,
};

typedef NS_ENUM(NSInteger, VCS_WS_VideoFrameType) {
    VCS_WS_VideoFrameUnknown = 0,
    VCS_WS_VideoFrameI = 1,
    VCS_WS_VideoFrameP,
    VCS_WS_VideoFrameB
};

typedef NS_ENUM(NSInteger, VCS_WS_VideoEncodeType) {
    VCS_WS_VideoEncodeUnknown = 0,
    VCS_WS_VideoEncodeMpeg4 = 1,
    VCS_WS_VideoEncodeH264,
    VCS_WS_VideoEncodeH265,
};

////8,000 Hz - 电话所用采样率, 对于人的说话已经足够
////11,025 Hz
////22,050 Hz - 无线电广播所用采样率
////32,000 Hz - miniDV 数码视频 camcorder、DAT (LP mode)所用采样率
////44,100 Hz - 音频 CD, 也常用于 MPEG-1 音频（VCD, SVCD, MP3）所用采样率
////47,250 Hz - 商用 PCM 录音机所用采样率
////48,000 Hz - miniDV、数字电视、DVD、DAT、电影和专业音频所用的数字声音所用采样率
////50,000 Hz - 商用数字录音机所用采样率
////96,000 或者 192,000 Hz - DVD-Audio、一些 LPCM DVD 音轨、BD-ROM（蓝光盘）音轨、和 HD-DVD （高清晰度 DVD）音轨所用所用采样率
////2.8224 MHz - Direct Stream Digital 的 1 位 sigma-delta modulation 过程所用采样率。
//typedef NS_ENUM(NSInteger, VCS_WS_AudioSampleRateType) {
//    VCS_WS_AudioSampleRateUnknown = 0,
//    VCS_WS_AudioSampleRate8000 = 1,
//    VCS_WS_AudioSampleRate11025,
//    VCS_WS_AudioSampleRate22050,
//    VCS_WS_AudioSampleRate32000,
//    VCS_WS_AudioSampleRate44100,
//    VCS_WS_AudioSampleRate47250,
//    VCS_WS_AudioSampleRate48000,
//    VCS_WS_AudioSampleRate50000,
//    VCS_WS_AudioSampleRate96000,
//};

typedef NS_ENUM(NSInteger, VCS_WS_AudioEncodeType) {
    VCS_WS_AudioEncodeUnknown = 0,
    VCS_WS_AudioEncodeTypeG711A,
    VCS_WS_AudioEncodeTypeG711U,
    VCS_WS_AudioEncodeTypeG7221,
    VCS_WS_AudioEncodeTypeG726,
    VCS_WS_AudioEncodeTypeAAC,
    VCS_WS_AudioEncodeTypePCM,
    VCS_WS_AudioEncodeTypeSVAC,
};

//// 码流通道类型
//typedef NS_ENUM(NSInteger, VCS_WS_SessionType) {
//    VCS_WS_SessionRealPlay = 1, // 实时预览
//    VCS_WS_SessionVoiceCom,     // 语音对讲
//    VCS_WS_SessionPlayback,     // 录像回放
//    VCS_WS_SessionDownload,     // 录像下载
//};


#pragma mark - class define(VCS)


// 回放参数 //
@interface VCS_WS_RecviewInfo : NSObject

@property (nonatomic, strong) NSString      *deviceUuid;     // 网关设备id
@property (nonatomic, strong) NSString      *cameraUuid;     // 监控设备id
@property (nonatomic, assign) NSInteger     channelIndex;   // 通道索引
@property (nonatomic, assign) NSInteger     streamQuality;  // 播放质量
@property (nonatomic, assign) float         speed;          // 播放速度，1/16～16之间
@property (nonatomic, assign) uint64_t      startTime;      // 播放开始时间
@property (nonatomic, assign) uint64_t      endTime;        // 播放结束时间

@end


#pragma mark - class define(WCS)

// 预览参数 //
@interface WCS_WS_PreviewInfo : NSObject

@property (nonatomic, strong) NSString*     devicePath;     // 设备路径
@property (nonatomic, assign) NSInteger     streamQuality;  // 播放质量

@end

// 语音对讲 //
@interface WCS_WS_VoiceComParam : NSObject

@property (nonatomic, strong) NSString*     devicePath;     // 设备路径

@end

// 回放参数 //
@interface WCS_WS_RecviewInfo : NSObject

@property (nonatomic, strong) NSString*     devicePath;     // 设备路径
@property (nonatomic, assign) NSInteger     streamQuality;  // 播放质量
@property (nonatomic, assign) float         speed;          // 播放速度，1/16～16之间
@property (nonatomic, assign) uint64_t      startTime;      // 播放开始时间
@property (nonatomic, assign) uint64_t      endTime;        // 播放结束时间

@end



